问题
Object中默认的toString方法,它返回的字符串只类类名加上一个“@符号”,后面是十六进制形式的hashCode,这些信息对我们来说用处不大,所以为了提供更好的关于类和对象的说明,我们应该总是覆盖toString()方法来提供更加清晰的说明,覆盖toString方法的好处以及覆盖toString的注意事项?
解决
覆盖toString方法的好处
toString方法虽然不会像equals这样的方法对类造成那么大的影响,但是一个好的toString可以使类用起来更加的舒服。当对象被传给println、printf、字符串联操作符(+)以及assert或者被调试器打印出来时,toString方法会被自动调用。这是一种重要的调用手段,如果不重写toString提供更明确的信息,这将很难让人理解。toString的输出,也可以方便我们debug
覆盖toString的注意事项
- 在实际应用中,toString方法应该返回对象中包含的所有值得关注的信息,如果对象太大或者对象中包含的状态信息难以用字符来表达,这样做就有点不切实际了,在这种情况下toString方法应该返回类的关键域信息;
- 在覆盖toString时可以指定输出格式,这样就可以编写相应的代码来解析这种字符串表示法,产生字符串表示法,以及把字符串表示嵌入到持久的数据中。但是,将来一旦输出格式变化了,会造成更大的问题。是否指定输出格式应该权衡。
总结
在实际开发过程中最好要覆盖toString方法,将类的有用信息使用toString方法进行输出,这样就可以方便调试或者打印的时候输出